package com.zero.xiaodai.utils;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class FileListUtil {

	// 设置一个全局动态数组，来存放文件路径
	// 主要遍历文件夹，包含所有子文件夹、文件的情况时，用到递归，所以要这样设置
	public static ArrayList<String> dirAllStrArr = new ArrayList<String>();

	// 这里是仅仅查询当前路径下的所有文件夹、文件并且存放其路径到文件数组
	// 由于遇到文件夹不查询其包含所有子文件夹、文件，因此没必要用到递归
	public static ArrayList<String> Dir(File dirFile) throws Exception {
		ArrayList<String> dirStrArr = new ArrayList<String>();

		if (dirFile.exists()) {
			// 直接取出利用listFiles()把当前路径下的所有文件夹、文件存放到一个文件数组
			File files[] = dirFile.listFiles();
			for (File file : files) {
				// 如果传递过来的参数dirFile是以文件分隔符，也就是/或者\结尾，则如此构造
				if (dirFile.getPath().endsWith(File.separator)) {
					dirStrArr.add(dirFile.getPath() + file.getName());
				} else {
					// 否则，如果没有文件分隔符，则补上一个文件分隔符，再加上文件名，才是路径
					dirStrArr.add(dirFile.getPath() + File.separator + file.getName());
				}
			}
		}
		return dirStrArr;
	}

	public static List<String> DirAll(File dirFile,List<String> sheetNames, List<String[][]> valuesList/*,Integer year ,String[][] content*/,List<List<String>> dirAllStrArrs,List<String> dirAllStrArr) throws Exception {

		if (dirFile.exists()) {
			boolean flag=true;
			File files[] = dirFile.listFiles();
			if(files.length==0) {
				flag=false;
			}
			for (File file : files) {
				// 如果遇到文件夹则递归调用。
				boolean nan=file.getName().matches("[0-9]+");
				if(!nan) {
					flag=nan;
				}
				
				if (file.isDirectory()) {
					// 递归调用
					dirAllStrArr=DirAll(file,sheetNames,valuesList,dirAllStrArrs,dirAllStrArr);
				} else {
					// 如果遇到文件夹则放入数组
					if (dirFile.getPath().endsWith(File.separator)) {
						dirAllStrArr.add(dirFile.getPath() + file.getName());
					} else {
						
						System.err.println(dirFile.getPath() + File.separator + file.getName());
						dirAllStrArr.add(dirFile.getPath() + File.separator + file.getName());
					}
				}
			}
			
			if(flag) {
				String dirFileName=dirFile.getName();
				if(dirFileName.contains("防")) {
					System.err.println("zzzzzzzzzzzzzzzzzzzzzzzzz");
				}
				if(sheetNames.contains(dirFileName)) {
					dirFileName+=(int) (Math.random() * 100000000);
					System.err.println("======"+dirFileName+"======");
				}
				sheetNames.add(dirFileName);
				
				List<String> newDirAllStrArr=new ArrayList<>();
				
				for(String dir:dirAllStrArr) {
					String []dirs=dir.split("\\\\");
					if(dirs[dirs.length-1].contains("项目")) {
						dir=dir.substring(0,dir.lastIndexOf("项目"));
					}else if(dirs[dirs.length-1].indexOf("_")>0) {
						dir=dir.substring(0,dir.lastIndexOf("_"));
					}else if(dirs[dirs.length-1].indexOf("-")>0) {
						dir=dir.substring(0,dir.lastIndexOf("-"));
					}else if(dirs[dirs.length-1].indexOf(".")>0) {
						dir=dir.substring(0,dir.lastIndexOf("."));
					}
					newDirAllStrArr.add(dir);
				}
//				dirAllStrArr.forEach(dir->{
//					
//					
//				});
				newDirAllStrArr=newDirAllStrArr.stream().distinct().collect(Collectors.toList());
				dirAllStrArrs.add(newDirAllStrArr);
				dirAllStrArr=new ArrayList<>();
			}
		}
		return dirAllStrArr;
	}
	
	public static void main(String[] args) throws Exception { 
	    File dirFile = new File("H:\\test/zipfile"); 
	    System.out.println(Dir(dirFile)); 
	    DirAll(dirFile,new ArrayList<>(),new ArrayList<>(),new ArrayList<>(),dirAllStrArr); 
	    for(String dir:dirAllStrArr){
	    	System.out.println(dir); 
	    }
	    //System.out.println(dirAllStrArr); 
	  } 

}
